package com.xhj.mybatis.plugin;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Signature
 *
 * @author XJks
 * @description 该注解用于标识方法签名信息，主要用于 MyBatis 插件开发时拦截特定方法。
 * @see Intercepts 参考 Intercepts 注解，用于组合使用
 */
@Documented // 表示该注解会包含在 Javadoc 文档中
@Retention(RetentionPolicy.RUNTIME) // 注解在运行时依然有效，可通过反射获取
@Target({}) // 该注解不能直接用于任何 Java 元素（如类、方法等），通常用于其他注解的属性
public @interface Signature { // 定义一个名为 Signature 的注解
    /**
     * 指定要拦截的 Java 类型（类），如 Executor.class
     *
     * @return 返回要拦截的类型
     */
    Class<?> type();

    /**
     * 指定要拦截的方法名，如 "update"
     *
     * @return 返回方法名
     */
    String method();

    /**
     * 指定方法参数的类型数组，用于精确匹配方法签名
     * 例如：{MappedStatement.class, Object.class}
     *
     * @return 返回参数类型数组
     */
    Class<?>[] args();
}

